Hosting services provide a means whereby multiple users can implement custom server configurations without the overhead costs associated with purchasing, upgrading, and maintaining the equipment needed to implement the configuration. Instead, the hosting service provides, maintains, and provisions the equipment so that multiple users are able to share such hardware. All the while, the hosting service creates the façade that each configuration is individually hosted on dedicated equipment.
To ensure quality of service for each configuration, typical hosting services allocate an amount of processing bandwidth (i.e., CPU cycles) to each configuration and charge users accordingly. For example, a configuration allocating 30% of the processing power of a physical device, guarantees that at any time during operation of the configuration, 30% of the processing power will be available to the configuration. In this way, traditional hosting services share resources while guaranteeing certain computational capacity to each configuration.
To facilitate the hosting services, users typically place an order for a hardware configuration requiring certain functionality. Users fill out forms or place telephone calls to specify their configuration. At the hosting service site, a system operator reviews the requests and manually determines where to distribute the configuration. The operator then configures the equipment and installs software as specified within the order request.
Once operational, changes to the configuration require additional requests to be placed with the operator. Therefore, through another order form or telephone call the users specify his request to an operator, who then must modify the configuration per the user's request. Since changing a configuration typically requires an operator to take down the configuration or temporarily disable the configuration, typical hosting services perform such modifications at specified times in the day where the impact to the customer is minimized. Additionally, by waiting until a specified time in the day, all changes to a particular piece of hardware can be done at one instant of the day, therefore minimizing downtime for all users.
Users typically make such modifications when their configurations experience greater or lesser loads or when they implement new components to be integrated with existing functionality. Therefore, hosting services provide a level of performance tracking to notify users of the performance of their configurations. However, reporting of hosting services typically coincides with billing reporting so that users are only notified at the end of a billing period as to the performance of their system.
However, as users become more sophisticated and require more control over their hosted configurations, the services provided by such hosting services are unable to meet the needs of such users. Users require a highly customizable and robust method by which to specify their configurations while still having a simple interface to do so. Additionally, since predicting behavior of a configuration prior to deployment is inaccurate at best, users require a means by which information as to their configurations is conveyed to them in real-time. Such information should assist the user in identifying potential problem areas prior to occurring or as they occur. Some users prefer direct monitoring where the information is conveyed to them whenever they so desire, while other users prefer indirect monitoring so that they are only notified of potential or actual problems when they occur.
In conjunction with such monitoring functionality, users require the ability to quickly and easily modify an existing configuration to respond to such changes. However, some users only have a small window in which to make the changes before the spike in demand is lost. Therefore, such users require a near instantaneous reconfiguration functionality to make and implement the changes without having to wait for service personal to accept, verify, and implement the changes. Rather, an automated system that simply responds to the users actions is desired.
Such rapid reconfiguration functionality is additionally desired so that the user need not always allot resources in case of a worst case scenario. For example, a user's configuration may only experience a traffic spike that requires 40% of the processing power for only ten minutes in a day. Typical hosting services require a user to statically purchase resources for the 40% processing power even though such traffic occurs for only a small percentage of the user's overall configuration. Therefore, a need arises to allow users the ability to dynamically allocate resources as needed and only pay for those resources as opposed to wasting resources in case the worst case scenario arises.
Additionally, users specify different configurations that utilize different amounts of resources. Therefore, to be billed based on a single resource that does not accurately reflect the usage of the configuration may be beneficial to some configurations while detrimental to others. Therefore, there is a need to monitor configurations based on resources other than allocated processing power. For instance, some users may prefer their configurations to be tracked based on allocated RAM, network bandwidth, or disk storage as some examples.